﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>

//// 一、使⽤条件表达式实现找两个数中较⼤值。
//int main()
//{
//	int a = 0;
//	int b = 0;
//	printf("请输入两个数：");
//	scanf("%d %d",&a,&b);
//
//	int m = a > b ? a : b;
//
//	//三目操作符  具体表示如下
//	//exp1 ? exp2 : exp3 ;
//	//判断exp1真假，如果为真，执行exp2。如果为假，执行exp3
//
//	return 0;
//}


//// 二、解释代码
//int main()
//{
//	int i = 0, a = 0, b = 2, c = 3, d = 4;
//	//i = a++ && ++b && d++;       //后置++,先使用再+1。此时i=0,a=1。&&操作符 唯有遇到假才停止，故直接往下执行从而打印出来
//	
//	
//	i = a++||++b||d++;         // 达到i=0,a=1后，||操作符只有遇到真才停止，所以还得算++b,此时i=1,b=3。i为非零，真，故往下执行打印
//	printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d);
//	return 0;
//}
//
//// && 两边的表达式都是真的时候，整个表达式才为真，只要有⼀个是假，则整个表达式为假。
//// || 两边的表达式只要有⼀个是真，整个表达式就是真，两边的表达式都为假的时候，才为假。



// 三、计算1~100之间3的倍数的数字之和
//int main()
//{
//	int i = 0;
//	int sum = 0;
//	for (i = 1; i <= 100; i++)
//	{
//		if(i % 3 ==0)  //算出3的倍数有哪些
//		{
//			sum += i;//sum = i+sum
//		}
//	}
//	printf("%d", sum);
//	return 0;
//}


//四、输⼊⼀个正的整数，逆序打印这个整数的每⼀位
//例如：
//输⼊：1234，输出：4 3 2 1
//输⼊：521，输出：1 2 5

//int main()
//{
//	int n = 0;
//	printf("请输入一个正整数：");
//
//	scanf("%d", &n);
//
//	while (n) 
//	{
//		printf("%d", n % 10);
//		n /= 10;
//
//	}
//
//
//	return 0;
//}




//五、输⼊⼀个正整数，计算这个整数是⼏位数？
//例如：
//输⼊：1234 输出：4
//输⼊：12 输出：2

//int main() 
//{
//	int n = 0;
//	int cnt = 0;
//	printf("请输入一个正整数：\n");
//	scanf("%d", &n);
//	do
//	{
//		cnt++;    //使用do while 循环，不管该数多小，最低1位数，故先cnt+1
//		 n /= 10;
//
//
//	} while (n);
//
//	printf("该正整数是 %d 位数", cnt);
//
//	return 0;
//}


//六、找出100~200之间的素数，并打印在屏幕上。
//注：素数⼜称质数，只能被1和本⾝整除的数字。
//
//1. 要从100~200之间找出素数，⾸先得有100~200之间的数，这⾥可以使⽤循环解决。
//2. 假设要判断i是否为素数，需要拿2~i - 1之间的数字去试除i，需要产⽣2~i - 1之间的数字，也可以使⽤
//循环解决。
//3. 如果2~i - 1之间有数字能整除i，则i不是素数，如果都不能整除，则i是素数。


//第一种
//int main()
//{
//	int count = 0;  //统计素数个数
//	int i = 0;
//	for (i = 100;i<=200;i++)
//	{
//		int flag = 1; //假定为素数
//		int j = 0;
//		for (j = 2; j < i - 1; j++)
//		{
//			if (i%j == 0)
//			{
//				flag = 0; //这是不是素数的标志
//				break;
//			}
//		}
//
//		if (flag == 1)
//		{
//			printf("%d ", i);
//			count++;   //累加不是素数的标志，以达到统计素数个数的目的
//		}
//	}
//	printf("\n");
//	printf("总共的素数为 %d ", count);
//
//
//	return 0;
//}



//第二种（优化）
//int main()
//{
//	int count = 0;
//	int i = 0;
//	for(i = 101;i <= 199;i+=2)   //由于已知100和200都不是素数，可直接取101和199，并且偶数必然不是素数，所以只考虑奇数
//	{
//		int flag = 1;
//		int j = 0;
//		for (j = 2; j <= sqrt(i); j++) //一个数的因子是不可能大于该数的开平方所得的数，即因子小于等于该数的开平方
//		{
//			if(i % j == 0)
//			{
//				flag = 0;
//				break;
//			}	
//		}
//
//		if (flag == 1)
//		{
//			printf("%d ", i);
//			count++;
//		}
//	}
//
//	printf("\n");
//	printf("总共的素数为 %d ", count);
//
//	return 0;
//}


////1.错误方案
//int main()
//{
//	int count = 0;  //统计素数个数
//	int i = 0;
//	for (i = 100;i<=200;i++)
//	{
//		int flag = 1; //假定为素数
//		int j = 0;
//		for (j = 2; j < i - 1; j++)
//		{
//			if (i%j == 0)
//			{
//				flag = 0; //这是不是素数的标志
//				break;
//			}
//			else
//			{
//				printf("%d",i);   //如果现在就else，好比用9来除，难道9%2不是0以后就判断9不是素数吗？当然这是不对的
//								  //所以此处不能直接else
//			}
//		}
//
//		//if (flag == 1)
//		//{
//		//	printf("%d ", i);
//		//	count++;   //累加不是素数的标志，以达到统计素数个数的目的
//		//}
//	}
//	printf("\n");
//	printf("总共的素数为 %d ", count);
//
//
//	return 0;
//}



//// 2.错误方案
//int main()
//{
//	int count = 0;  //统计素数个数
//	int i = 0;
//	for (i = 100;i<=200;i++)
//	{
//		int flag = 1; //假定为素数
//		int j = 0;
//		for (j = 2; j < i - 1; j++)
//		{
//			if (i%j == 0)
//			{
//				flag = 0; //这是不是素数的标志
//				break;
//			}
//
//			if (flag == 1)  //如果把这个判断素数的标志放到第二个循环里面，那么判断出来的素数会重复执行好多遍，直到因子小于该数开平方
//			{
//				printf("%d ", i);
//				count++;   //累加不是素数的标志，以达到统计素数个数的目的
//			}
//		}
//
//		//if (flag == 1)
//		//{
//		//	printf("%d ", i);
//		//	count++;   //累加不是素数的标志，以达到统计素数个数的目的
//		//}
//	}
//	printf("\n");
//	printf("总共的素数为 %d ", count);
//
//
//	return 0;
//}
